home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Tools / Dev / mamesrc / include / moo / db.h next >
C/C++ Source or Header  |  1999-12-03  |  6KB  |  248 lines

  1. #ifndef DB_H
  2. #define DB_H
  3.  
  4. #include <moo/moo.h>
  5.  
  6. typedef uint    (*dbbuf_read_f)(void *dbbuf, void *buf, uint len);
  7. typedef int        (*dbbuf_readstring_f)(void *dbbuf, char **strp);
  8. typedef void    (*dbbuf_unreadstring_f)(void *dbbuf);
  9. typedef uint    (*dbbuf_write_f)(void *dbbuf, void *buf, uint len);
  10. typedef int        (*dbbuf_writestring_f)(void *dbbuf, char *str);
  11.  
  12. typedef struct
  13. {
  14.     obj_t                    Obj;
  15.     dbbuf_read_f            Read;
  16.     dbbuf_readstring_f        ReadString;
  17.     dbbuf_unreadstring_f    UnReadString;
  18.     dbbuf_write_f            Write;
  19.     dbbuf_writestring_f        WriteString;
  20.     char                    *CurrentString;
  21.     uint                    Flags;
  22.     string_t                *String;
  23.     char                    Buf[512];
  24.     char                    *BufPtr;
  25.     uint                    BufLength;
  26.     uint                    WriteCount;
  27. } dbbuf_t;
  28.  
  29. #define DBBUFF_STRINGUNREAD    1
  30.  
  31. int        dbbufReadString(dbbuf_t *this, char **strp);
  32. void    dbbufUnReadString(dbbuf_t *this);
  33. int        dbbufWriteString(dbbuf_t *this, char *str);
  34. void    dbbufDispose(dbbuf_t *this);
  35. int        dbbufInit(dbbuf_t *this, char *str);
  36. dbbuf_t    *dbbufNew(char *str);
  37.  
  38. /* dbbufReadString() return codes. */
  39.  
  40. #define DBRS_OK            0
  41. #define DBRS_MORE        1
  42. #define DBRS_NOSTRING    2
  43.  
  44. typedef struct dbitems
  45. {
  46.     struct dbitems    *Next;
  47.     uint            NumItems;
  48.     char            Items[0];
  49. } dbitems_t;
  50.  
  51. typedef int        (*dbobj_accept_f)(void *this, char *name);
  52. typedef int        (*dbobj_read_f)(void *this, int type, int index, dbbuf_t *dbbuf);
  53. typedef int        (*dbobj_write_f)(void *this, int type, int index, dbbuf_t *dbbuf);
  54. typedef void    (*dbobj_setitemsdef_f)(void *this, void *items, uint num_items);
  55. typedef int        (*dbobj_isdefault_f)(void *this, int index);
  56. typedef void    (*dbobj_reset_f)(void *this);
  57. typedef void    (*dbobj_foreachitem_f)(void *this, void *item);
  58.  
  59. typedef struct
  60. {
  61.     obj_t                Obj;
  62.     dbobj_accept_f        Accept;
  63.     dbobj_read_f        Read;
  64.     dbobj_write_f        Write;
  65.     dbobj_setitemsdef_f    SetItemsDef;
  66.     dbobj_isdefault_f    IsDefault;
  67.     char                 *Name;
  68.     int                    Changed;
  69.     uint                ItemSize;
  70.     uint                MinItems;
  71.     uint                NumItems;
  72.     uint                CurrentItem;
  73.     void                *CurrentItemAddr;
  74.     dbitems_t            DBItems;
  75. } dbobj_t;
  76.  
  77. #define DBOBJRT_BINARY    0
  78. #define DBOBJRT_STRING    1
  79.  
  80. #define DBOBJWT_BINARY    0
  81. #define DBOBJWT_STRING    1
  82. #define DBOBJWT_HELP    2
  83. #define DBOBJWT_NAME    3
  84.  
  85. int        dbobjAccept(dbobj_t *this, char *name);
  86. void    dbobjForEachItem(dbobj_t *this, dbobj_foreachitem_f func);
  87. void    *dbobjGetItemAddr(dbobj_t *this, uint index);
  88. void    *dbobjGetItems(dbobj_t *this);
  89. void    dbobjInitItems(dbobj_t *this);
  90. void    dbobjDispose(dbobj_t *this);
  91. int        dbobjInit(dbobj_t *this, char *name, uint num_items, uint min_items, uint item_size);
  92. void    *dbobjNew(char *name, uint num_items, uint min_items, uint item_size);
  93.  
  94. #define DBAccept(obj, name)                    (((dbobj_t *)(obj))->Accept(obj,name))
  95. #define DBRead(obj, type, index, dbbuf)        (((dbobj_t *)(obj))->Read(obj,type,index,dbbuf))
  96. #define DBWrite(obj, type, index, dbbuf)    (((dbobj_t *)(obj))->Write(obj,type,index,dbbuf))
  97. #define DBIsDefault(obj, index)                (((dbobj_t *)(obj))->IsDefault(obj,index))
  98. #define DBReset(obj)                        (((dbobj_t *)(obj))->Reset(obj))
  99.  
  100. typedef struct
  101. {
  102.     dbobj_t    *DBObj;
  103.     uint    Index;
  104. } dbobjref_t;
  105.  
  106. typedef struct
  107. {
  108.     dbbuf_t        DBBuf;
  109.     char        *Name;
  110.     FILE        *File;
  111.     uint        NumDBObjs;
  112.     dbobjref_t    *DBObjRefs;
  113. } dbfile_t;
  114.  
  115. /* dbfile API: */
  116.  
  117. dbfile_t    *dbfileNew(char *name, void *dbobjs,...);
  118. int            dbfileInit(dbfile_t *this, char *name, void *dbobjs,...);
  119. void        dbfileDispose(dbfile_t *this);
  120. int            dbfileLoad(dbfile_t *this, char *name);
  121. int            dbfileSaveAs(dbfile_t *this, char *name);
  122. int            dbfileSave(dbfile_t *this);
  123.  
  124. typedef struct
  125. {
  126.     dbbuf_t        DBBuf;
  127.     int            ArgC;
  128.     char        **ArgV;
  129.     int            ArgI;
  130.     char        *Src;
  131.     int            WriteCount;
  132.     uint        NumDBObjs;
  133.     dbobjref_t    *DBObjRefs;
  134. } dbarg_t;
  135.  
  136. /* dbarg API: */
  137.  
  138. dbarg_t    *dbargNew(void *dbobjs,...);
  139. int        dbargInit(dbarg_t *this, void *dbobjs,...);
  140. void    dbargDispose(dbarg_t *this);
  141. int        dbargParse(dbarg_t *this, int argc, char **argv, uint index);
  142. void    dbargPrintHelp(dbarg_t *this);
  143.  
  144. typedef struct
  145. {
  146.     dbobj_t    DBObj;
  147.     uint    NumDBObjs;
  148. } dbsection_t;
  149.  
  150. /* dbsection API: */
  151.  
  152. dbsection_t    *dbsectionNew(char *name, void *dbobjs,...);
  153.  
  154. typedef struct
  155. {
  156.     dbobj_t    DBObj;
  157.     char    **Names;
  158.     uint    CurrentIndex;
  159.     uint    NumDBObjs;
  160. } dbsections_t;
  161.  
  162. /* dbsections API: */
  163.  
  164. dbsections_t    *dbsectionsNew(char **names, void *dbobjs,...);
  165.  
  166. typedef struct
  167. {
  168.     dbobj_t        DBObj;
  169.     int            Def;
  170.     int            Max;
  171.     int            Min;
  172. } dbint_t;
  173.  
  174. dbint_t    *dbintNew(char *name, uint num_items, uint min_items, int def, int max, int min);
  175. int        dbintSet(dbint_t *dbint, uint index, int val);
  176. int        *dbintGetAddr(dbint_t *dbint, uint index);
  177. int        dbintGet(dbint_t *dbint, uint index);
  178.  
  179. typedef struct
  180. {
  181.     dbobj_t        DBObj;
  182.     uint        Def;
  183.     uint        Max;
  184.     uint        Min;
  185. } dbuint_t;
  186.  
  187. dbuint_t    *dbuintNew(char *name, uint num_items, uint min_items, uint def, uint max, uint min);
  188. int            dbuintSet(dbuint_t *dbint, uint index, uint val);
  189. uint        *dbuintGetAddr(dbuint_t *dbint, uint index);
  190. uint        dbuintGet(dbuint_t *dbint, uint index);
  191.  
  192. typedef struct
  193. {
  194.     char    *Name;
  195.     int        Val;
  196. } dbenumdef_t;
  197.  
  198. typedef struct
  199. {
  200.     dbobj_t        DBObj;
  201.     char        Def;
  202.     dbenumdef_t    *DBEnumDefs;
  203. } dbenum_t;
  204.  
  205. /* dbenum API: */
  206.  
  207. dbenum_t    *dbenumNew(char *name, uint num_items, uint min_items, char def, dbenumdef_t *dbenum_defs);
  208. int            dbenumSet(dbenum_t *dbenum, uint index, char val);
  209. char        *dbenumGetAddr(dbenum_t *dbenum, uint index);
  210. char        dbenumGet(dbenum_t *dbenum, uint index);
  211.  
  212. typedef dbenum_t dbbool_t;
  213.  
  214. /* dbbool API: */
  215.  
  216. dbbool_t    *dbboolNew(char *name, uint num_items, uint min_items, char def);
  217. #define        dbboolSet(dbbool,index,val)    dbenumSet(dbbool,index,val)
  218. #define        dbboolGetAddr(dbbool,index)    dbenumGetAddr(dbbool,index)
  219. #define        dbboolGet(dbbool,index)        dbenumGet(dbbool,index)
  220.  
  221. typedef struct
  222. {
  223.     dbobj_t        DBObj;
  224.     char        *Def;
  225. } dbstring_t;
  226.  
  227. dbstring_t    *dbstringNew(char *name, uint num_items, uint min_items, char *def);
  228. int            dbstringSet(dbstring_t *this, uint index, char *str);
  229. string_t    **dbstringGetAddr(dbstring_t *this, uint index);
  230. string_t    *dbstringGetString(dbstring_t *this, uint index);
  231. char        *dbstringGet(dbstring_t *this, uint index);
  232.  
  233. #define DBEND    ((void *)(~0))
  234.  
  235. #define DBE_OK                0
  236. #define DBE_ERROR            1
  237. #define DBE_NOSTRING        2
  238. #define DBE_ILLEGALSTRING    3
  239. #define DBE_MAXCLIPPED        4
  240. #define DBE_MINCLIPPED        5
  241. #define DBE_NOITEM            6
  242. #define DBE_ILLEGALVALUE    7
  243.  
  244. #define DBFE_OK            0
  245. #define DBFE_OPENFAILED    1
  246.  
  247. #endif
  248.